package br.com.toscano.gobra.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Util {

	private static final String NOME_ARQUIVO_CONFIGURACAO = "demoiselle.properties";
	
	private static String dirCorrente;
	
	static {


		URL url = Util.class.getClassLoader().getResource(
				NOME_ARQUIVO_CONFIGURACAO);
		if (url != null) {
			dirCorrente = url.toString();
			if (dirCorrente.startsWith("file:\\")) { 
				dirCorrente = dirCorrente.substring("file:\\".length(), dirCorrente.length());
			}
			if (dirCorrente.startsWith("vfs:/")){
				dirCorrente = dirCorrente.substring("vfs:/".length(), dirCorrente.length());
			}
			try {
				if(dirCorrente.indexOf("WEB-INF") != -1) { 
					dirCorrente = dirCorrente.substring(0, dirCorrente.indexOf("WEB-INF"));
				}
				if(dirCorrente.endsWith("/")) { 
					dirCorrente = dirCorrente.substring(0, dirCorrente.length() - 1);
				}
				int local = dirCorrente.indexOf(":");
				if (local == -1) {
					// SE NAO TEM : É PQ EH LINUX
					dirCorrente = "/" + dirCorrente;
				}
			} catch (Exception e) {
			}
		} else {
			throw new RuntimeException("O caminho do arquivo de configuração principal do sistema não foi encontrado: " + NOME_ARQUIVO_CONFIGURACAO);
		}
	}
	
	  public static String dateToString(Date date) {
	      String formatado = "";
	      try {
	         SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
	         formatado = sdf.format(date);

	      } catch (NullPointerException e) {          
	         return "";

	      } catch (Throwable e) {         
	      }
	      
	      return formatado;
	   } 
	  
	public static String dirCorrente() {
		if (dirCorrente.indexOf(NOME_ARQUIVO_CONFIGURACAO) != -1) {
			return dirCorrente.substring(0,dirCorrente.indexOf(NOME_ARQUIVO_CONFIGURACAO));
		} else {
			return dirCorrente;	
		}
	}
	
	public static String getUrlBase(HttpServletRequest req) {
		String protocolo = req.getProtocol();
		int i = protocolo.indexOf("/");
		if (i != -1) {
			protocolo = protocolo.substring(0, i);
		}
		int numeroPorta = req.getServerPort();
		String porta = "";
		if (numeroPorta != 80) {
			porta = ":" + numeroPorta;
		}
		return (protocolo + "://" + req.getServerName() + porta + req.getContextPath()).toLowerCase();
	}
	
	
	public static void downLoad(String filePath) throws IOException {
		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletResponse response = (HttpServletResponse) context
				.getExternalContext().getResponse();
		File file = new File(Util.dirCorrente()+ "/relatorio/" +filePath);

        response.setHeader("Content-Disposition", "attachment;filename=\"" + file.getName() + "\""); //aki eu seto o header e o nome q vai aparecer na hr do donwload  
        response.setContentLength((int) file.length()); // O tamanho do arquivo  
        response.setContentType("application/vnd.ms-excel"); // e obviamente o tipo  
        
        if(file.toString().endsWith("xlsx") || file.toString().endsWith("xls") ){
            response.setContentType("application/vnd.ms-excel"); // e obviamente o tipo  
        } else if(file.toString().endsWith("pdf")){
            response.setContentType("application/pdf"); // e obviamente o tipo  
        }
  
        try {  
            FileInputStream in = new FileInputStream(file);  
            OutputStream out = response.getOutputStream();  
  
            byte[] buf = new byte[(int)file.length()];  
            int count;  
            while ((count = in.read(buf)) >= 0) {  
                out.write(buf, 0, count);  
            }  
            in.close();  
            out.flush();  
            out.close();  
            context.responseComplete();  
        } catch (IOException ex) {  
            System.out.println("Error in downloadFile: " + ex.getMessage());  
            ex.printStackTrace();  
        }  
	}

}
